package main

import (
	"fmt"
	"strconv"
)

func main() {
	//1.基本的类型转换
	a := int(3.0)
	fmt.Println(a)
	//在go语言中不支持变量间的隐式类型转换
	//1.变量间类型转换不支持
	var b int = 5.0 //常量到变量是会进行隐式转换的
	fmt.Println(b)

	c := 5.1
	fmt.Printf("%T\n", c)
	var d int = int(c)
	fmt.Println(d)
	/*
	   不是所有数据类型都能转换的，例如字母格式的string类型"abcd"转换为int肯定会失败
	   低精度转换为高精度时是安全的，高精度的值转换为低精度时会丢失精度。例如int32转换为int16，float32转换为int
	   这种简单的转换方式不能对int(float)和string进行互转，要跨大类型转换，可以使用strconv包提供的函数
	*/
	var a1 int64 = 56
	var b1 int32 = int32(a1)
	fmt.Println(b1)

	//int转成字符串 itoa
	fmt.Printf("%T\n", strconv.Itoa(int(a1)))
	//字符串转int aoti
	data, _ := strconv.Atoi("1212")
	fmt.Printf("%T,%d\n", data, data)

	//parse 类的函数
	b2, err := strconv.ParseBool("true")
	fmt.Println(err)
	fmt.Printf("%T,%s\n", b2, b2)
	f, err := strconv.ParseFloat("3.123", 32)
	fmt.Printf("%T,%d\n", f, f)

	i, err := strconv.ParseInt("1212", 2, 64)
	//base 可以是进制位 2，8，10，16
	fmt.Println(i)
	//其他类型转字符串
	s := strconv.FormatBool(true)
	fmt.Println(s)

	s1 := strconv.FormatFloat(3.1212, 'E', -1, 64)
	fmt.Println(s1)

	s2 := strconv.FormatInt(-42, 10)
	fmt.Printf("%T,%s\n", s2, s2)

	s3 := strconv.FormatUint(42, 10)
	fmt.Printf("%T,%s\n", s3, s3)
}
